package com.redepronik.negosysres.rrhh.controller;


import static com.redepronik.negosys.utils.Utils.redondear;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.redepronik.negosys.rrhh.entity.Precio;
import com.redepronik.negosys.rrhh.entity.Tipocliente;
import com.redepronik.negosys.rrhh.service.PrecioService;
import com.redepronik.negosys.rrhh.service.TipoClienteService;

@Controller
@Scope("session")
public class TipoClienteBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Autowired
	private TipoClienteService tipoClienteService;

	@Autowired
	private PrecioService precioService;

	private List<Tipocliente> listaTipoClientes;
	private Tipocliente tipoCliente;
	private Precio precio;

	public TipoClienteBean() {
		listaTipoClientes = new ArrayList<Tipocliente>();
		tipoCliente = new Tipocliente();
		precio = new Precio();
	}

	public void actualizar(ActionEvent actionEvent) {
		tipoCliente.setPrecio(precioService.obtenerPorPrecioId(precio
				.getPrecioid()));
		String mensaje = tipoClienteService.actualizar(tipoCliente);
		mensaje(mensaje, "ACTUALIZÓ");
	}

	public void eliminar(ActionEvent actionEvent) {
		tipoClienteService.eliminar(tipoCliente);
		if (tipoCliente.getActivo())
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					"ACTIVO", "TIPO CLIENTE: " + tipoCliente.getNombre()));
		else
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					"DESACTIVO", "TIPO CLIENTE: " + tipoCliente.getNombre()));
	}

	public List<Tipocliente> getListaTipoClientes() {
		listaTipoClientes = tipoClienteService.obtener(null);
		for (Tipocliente tc : listaTipoClientes) {
			tc.setDescuento(redondear(tc.getDescuento()));
			tc.getPrecio().setPorcentaje(
					redondear(tc.getPrecio().getPorcentaje()));
		}
		return listaTipoClientes;
	}

	public Precio getPrecio() {
		return precio;
	}

	public Tipocliente getTipoCliente() {
		if (tipoCliente.getTipoclienteid() != null)
			precio = tipoCliente.getPrecio();

		return tipoCliente;
	}

	public void insertar(ActionEvent actionEvent) {
		tipoCliente.setPrecio(precioService.obtenerPorPrecioId(precio
				.getPrecioid()));
		String mensaje = tipoClienteService.insertar(tipoCliente);
		mensaje(mensaje, "INSERTÓ");
	}

	public void limpiar() {
		tipoCliente = new Tipocliente();
		precio = new Precio();
	}

	private void mensaje(String mensaje, String titulo) {
		RequestContext context = RequestContext.getCurrentInstance();
		if (mensaje.compareTo("SAVE") == 0) {
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					titulo, "Tipo Cliente: " + tipoCliente.getNombre()));
			context.addCallbackParam("error", true);
			limpiar();
		} else {
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					"ERROR", mensaje));
			context.addCallbackParam("error", false);
		}
	}

	private void presentaMensaje(FacesMessage message) {
		FacesContext.getCurrentInstance().addMessage(null, message);
	}

	public void setListaTipoClientes(List<Tipocliente> listaTipoClientes) {
		this.listaTipoClientes = listaTipoClientes;
	}

	public void setPrecio(Precio precio) {
		this.precio = precio;
	}

	public void setTipoCliente(Tipocliente tipoCliente) {
		this.tipoCliente = tipoCliente;
	}

}
